home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1998 August / PC Plus SuperCD 50a Issue 142 (CD142a) (August 1998).iso / trial / demon / TURNPIKE.1 / CLASSES.ZIP / JAVA / NET / URLConnection.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-04-14  |  9.4 KB  |  433 lines

  1. package java.net;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.util.Date;
  7. import java.util.Hashtable;
  8. import java.util.StringTokenizer;
  9.  
  10. public abstract class URLConnection {
  11.    protected URL url;
  12.    protected boolean doInput = true;
  13.    protected boolean doOutput = false;
  14.    private static boolean defaultAllowUserInteraction;
  15.    protected boolean allowUserInteraction;
  16.    private static boolean defaultUseCaches = true;
  17.    protected boolean useCaches;
  18.    protected long ifModifiedSince;
  19.    protected boolean connected;
  20.    static ContentHandlerFactory factory;
  21.    private static Hashtable handlers = new Hashtable();
  22.    private static ContentHandler UnknownContentHandlerP = new UnknownContentHandler();
  23.    private static final String contentClassPrefix = "sun.net.www.content";
  24.    private static final String contentPathProp = "java.content.handler.pkgs";
  25.    static Hashtable extension_map = new Hashtable();
  26.  
  27.    public abstract void connect() throws IOException;
  28.  
  29.    protected URLConnection(URL var1) {
  30.       this.allowUserInteraction = defaultAllowUserInteraction;
  31.       this.useCaches = defaultUseCaches;
  32.       this.connected = false;
  33.       this.url = var1;
  34.    }
  35.  
  36.    public URL getURL() {
  37.       return this.url;
  38.    }
  39.  
  40.    public int getContentLength() {
  41.       return this.getHeaderFieldInt("content-length", -1);
  42.    }
  43.  
  44.    public String getContentType() {
  45.       return this.getHeaderField("content-type");
  46.    }
  47.  
  48.    public String getContentEncoding() {
  49.       return this.getHeaderField("content-encoding");
  50.    }
  51.  
  52.    public long getExpiration() {
  53.       return this.getHeaderFieldDate("expires", 0L);
  54.    }
  55.  
  56.    public long getDate() {
  57.       return this.getHeaderFieldDate("date", 0L);
  58.    }
  59.  
  60.    public long getLastModified() {
  61.       return this.getHeaderFieldDate("last-modified", 0L);
  62.    }
  63.  
  64.    public String getHeaderField(String var1) {
  65.       return null;
  66.    }
  67.  
  68.    public int getHeaderFieldInt(String var1, int var2) {
  69.       try {
  70.          String var3 = this.getHeaderField(var1);
  71.          return Integer.parseInt(var3, 10);
  72.       } catch (Throwable var4) {
  73.          return var2;
  74.       }
  75.    }
  76.  
  77.    public long getHeaderFieldDate(String var1, long var2) {
  78.       try {
  79.          return Date.parse(this.getHeaderField(var1));
  80.       } catch (Throwable var4) {
  81.          return var2;
  82.       }
  83.    }
  84.  
  85.    public String getHeaderFieldKey(int var1) {
  86.       return null;
  87.    }
  88.  
  89.    public String getHeaderField(int var1) {
  90.       return null;
  91.    }
  92.  
  93.    public Object getContent() throws IOException {
  94.       return this.getContentHandler().getContent(this);
  95.    }
  96.  
  97.    public InputStream getInputStream() throws IOException {
  98.       throw new UnknownServiceException("protocol doesn't support input");
  99.    }
  100.  
  101.    public OutputStream getOutputStream() throws IOException {
  102.       throw new UnknownServiceException("protocol doesn't support output");
  103.    }
  104.  
  105.    public String toString() {
  106.       return this.getClass().getName() + ":" + this.url;
  107.    }
  108.  
  109.    public void setDoInput(boolean var1) {
  110.       if (this.connected) {
  111.          throw new IllegalAccessError("Already connected");
  112.       } else {
  113.          this.doInput = var1;
  114.       }
  115.    }
  116.  
  117.    public boolean getDoInput() {
  118.       return this.doInput;
  119.    }
  120.  
  121.    public void setDoOutput(boolean var1) {
  122.       if (this.connected) {
  123.          throw new IllegalAccessError("Already connected");
  124.       } else {
  125.          this.doOutput = var1;
  126.       }
  127.    }
  128.  
  129.    public boolean getDoOutput() {
  130.       return this.doOutput;
  131.    }
  132.  
  133.    public void setAllowUserInteraction(boolean var1) {
  134.       if (this.connected) {
  135.          throw new IllegalAccessError("Already connected");
  136.       } else {
  137.          this.allowUserInteraction = var1;
  138.       }
  139.    }
  140.  
  141.    public boolean getAllowUserInteraction() {
  142.       return this.allowUserInteraction;
  143.    }
  144.  
  145.    public static void setDefaultAllowUserInteraction(boolean var0) {
  146.       defaultAllowUserInteraction = var0;
  147.    }
  148.  
  149.    public static boolean getDefaultAllowUserInteraction() {
  150.       return defaultAllowUserInteraction;
  151.    }
  152.  
  153.    public void setUseCaches(boolean var1) {
  154.       if (this.connected) {
  155.          throw new IllegalAccessError("Already connected");
  156.       } else {
  157.          this.useCaches = var1;
  158.       }
  159.    }
  160.  
  161.    public boolean getUseCaches() {
  162.       return this.useCaches;
  163.    }
  164.  
  165.    public void setIfModifiedSince(long var1) {
  166.       if (this.connected) {
  167.          throw new IllegalAccessError("Already connected");
  168.       } else {
  169.          this.ifModifiedSince = var1;
  170.       }
  171.    }
  172.  
  173.    public long getIfModifiedSince() {
  174.       return this.ifModifiedSince;
  175.    }
  176.  
  177.    public boolean getDefaultUseCaches() {
  178.       return defaultUseCaches;
  179.    }
  180.  
  181.    public void setDefaultUseCaches(boolean var1) {
  182.       defaultUseCaches = var1;
  183.    }
  184.  
  185.    public void setRequestProperty(String var1, String var2) {
  186.       if (this.connected) {
  187.          throw new IllegalAccessError("Already connected");
  188.       }
  189.    }
  190.  
  191.    public String getRequestProperty(String var1) {
  192.       if (this.connected) {
  193.          throw new IllegalAccessError("Already connected");
  194.       } else {
  195.          return null;
  196.       }
  197.    }
  198.  
  199.    public static void setDefaultRequestProperty(String var0, String var1) {
  200.    }
  201.  
  202.    public static String getDefaultRequestProperty(String var0) {
  203.       return null;
  204.    }
  205.  
  206.    public static synchronized void setContentHandlerFactory(ContentHandlerFactory var0) {
  207.       if (factory != null) {
  208.          throw new Error("factory already defined");
  209.       } else {
  210.          SecurityManager var1 = System.security;
  211.          if (var1 != null) {
  212.             var1.checkSetFactory();
  213.          }
  214.  
  215.          factory = var0;
  216.       }
  217.    }
  218.  
  219.    synchronized ContentHandler getContentHandler() throws UnknownServiceException {
  220.       String var1 = this.getContentType();
  221.       ContentHandler var2 = null;
  222.       if (var1 == null) {
  223.          throw new UnknownServiceException("no content-type");
  224.       } else {
  225.          try {
  226.             var2 = (ContentHandler)handlers.get(var1);
  227.             if (var2 != null) {
  228.                return var2;
  229.             }
  230.          } catch (Exception var5) {
  231.          }
  232.  
  233.          if (factory != null) {
  234.             var2 = factory.createContentHandler(var1);
  235.          }
  236.  
  237.          if (var2 == null) {
  238.             try {
  239.                var2 = this.lookupContentHandlerClassFor(var1);
  240.             } catch (Exception var4) {
  241.                ((Throwable)var4).printStackTrace();
  242.                var2 = UnknownContentHandlerP;
  243.             }
  244.  
  245.             handlers.put(var1, var2);
  246.          }
  247.  
  248.          return var2;
  249.       }
  250.    }
  251.  
  252.    private ContentHandler lookupContentHandlerClassFor(String var1) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
  253.       String var2 = this.typeToPackageName(var1);
  254.       String var3 = this.getContentHandlerPkgPrefixes();
  255.       StringTokenizer var4 = new StringTokenizer(var3, "|");
  256.  
  257.       while(var4.hasMoreTokens()) {
  258.          String var5 = var4.nextToken().trim();
  259.  
  260.          try {
  261.             String var6 = var5 + "." + var2;
  262.             ContentHandler var7 = (ContentHandler)Class.forName(var6).newInstance();
  263.             return var7;
  264.          } catch (Exception var8) {
  265.          }
  266.       }
  267.  
  268.       return UnknownContentHandlerP;
  269.    }
  270.  
  271.    private String typeToPackageName(String var1) {
  272.       int var2 = var1.count;
  273.       char[] var3 = new char[var2];
  274.       System.arraycopy(var1.value, var1.offset, var3, 0, var2);
  275.  
  276.       for(int var4 = 0; var4 < var2; ++var4) {
  277.          char var5 = var3[var4];
  278.          if (var5 == '/') {
  279.             var3[var4] = '.';
  280.          } else if ((var5 < 'A' || var5 > 'Z') && (var5 < 'a' || var5 > 'z') && (var5 < '0' || var5 > '9')) {
  281.             var3[var4] = '_';
  282.          }
  283.       }
  284.  
  285.       return new String(var3);
  286.    }
  287.  
  288.    private String getContentHandlerPkgPrefixes() {
  289.       String var1 = System.getProperty("java.content.handler.pkgs", "");
  290.       if (var1 != "") {
  291.          var1 = var1 + "|";
  292.       }
  293.  
  294.       return var1 + "sun.net.www.content";
  295.    }
  296.  
  297.    protected static String guessContentTypeFromName(String var0) {
  298.       String var1 = "";
  299.       int var2 = var0.lastIndexOf(35, var0.count - 1);
  300.       if (var2 != -1) {
  301.          var0 = var0.substring(0, var2 - 1);
  302.       }
  303.  
  304.       var2 = var0.lastIndexOf(46, var0.count - 1);
  305.       int var3 = var0.lastIndexOf(47, var0.count - 1);
  306.       var2 = var2 >= var3 ? var2 : var3;
  307.       var3 = var0.lastIndexOf(63, var0.count - 1);
  308.       var2 = var2 >= var3 ? var2 : var3;
  309.       if (var2 != -1 && var0.charAt(var2) == '.') {
  310.          var1 = var0.substring(var2, var0.count).toLowerCase();
  311.       }
  312.  
  313.       return (String)extension_map.get(var1);
  314.    }
  315.  
  316.    private static void setSuffix(String var0, String var1) {
  317.       extension_map.put(var0, var1);
  318.    }
  319.  
  320.    protected static String guessContentTypeFromStream(InputStream var0) throws IOException {
  321.       var0.mark(10);
  322.       int var1 = var0.read();
  323.       int var2 = var0.read();
  324.       int var3 = var0.read();
  325.       int var4 = var0.read();
  326.       int var5 = var0.read();
  327.       int var6 = var0.read();
  328.       var0.reset();
  329.       if (var1 == 71 && var2 == 73 && var3 == 70 && var4 == 56) {
  330.          return "image/gif";
  331.       } else if (var1 == 35 && var2 == 100 && var3 == 101 && var4 == 102) {
  332.          return "image/x-bitmap";
  333.       } else if (var1 == 33 && var2 == 32 && var3 == 88 && var4 == 80 && var5 == 77 && var6 == 50) {
  334.          return "image/x-pixmap";
  335.       } else {
  336.          return var1 != 60 || var2 != 33 && (var6 != 62 || (var2 != 104 || (var3 != 116 || var4 != 109 || var5 != 108) && (var3 != 101 || var4 != 97 || var5 != 100)) && (var2 != 98 || var3 != 111 || var4 != 100 || var5 != 121)) ? null : "text/html";
  337.       }
  338.    }
  339.  
  340.    static {
  341.       setSuffix("", "content/unknown");
  342.       setSuffix(".uu", "application/octet-stream");
  343.       setSuffix(".saveme", "application/octet-stream");
  344.       setSuffix(".dump", "application/octet-stream");
  345.       setSuffix(".hqx", "application/octet-stream");
  346.       setSuffix(".arc", "application/octet-stream");
  347.       setSuffix(".o", "application/octet-stream");
  348.       setSuffix(".a", "application/octet-stream");
  349.       setSuffix(".bin", "application/octet-stream");
  350.       setSuffix(".exe", "application/octet-stream");
  351.       setSuffix(".z", "application/octet-stream");
  352.       setSuffix(".gz", "application/octet-stream");
  353.       setSuffix(".oda", "application/oda");
  354.       setSuffix(".pdf", "application/pdf");
  355.       setSuffix(".eps", "application/postscript");
  356.       setSuffix(".ai", "application/postscript");
  357.       setSuffix(".ps", "application/postscript");
  358.       setSuffix(".rtf", "application/rtf");
  359.       setSuffix(".dvi", "application/x-dvi");
  360.       setSuffix(".hdf", "application/x-hdf");
  361.       setSuffix(".latex", "application/x-latex");
  362.       setSuffix(".cdf", "application/x-netcdf");
  363.       setSuffix(".nc", "application/x-netcdf");
  364.       setSuffix(".tex", "application/x-tex");
  365.       setSuffix(".texinfo", "application/x-texinfo");
  366.       setSuffix(".texi", "application/x-texinfo");
  367.       setSuffix(".t", "application/x-troff");
  368.       setSuffix(".tr", "application/x-troff");
  369.       setSuffix(".roff", "application/x-troff");
  370.       setSuffix(".man", "application/x-troff-man");
  371.       setSuffix(".me", "application/x-troff-me");
  372.       setSuffix(".ms", "application/x-troff-ms");
  373.       setSuffix(".src", "application/x-wais-source");
  374.       setSuffix(".wsrc", "application/x-wais-source");
  375.       setSuffix(".zip", "application/zip");
  376.       setSuffix(".bcpio", "application/x-bcpio");
  377.       setSuffix(".cpio", "application/x-cpio");
  378.       setSuffix(".gtar", "application/x-gtar");
  379.       setSuffix(".shar", "application/x-shar");
  380.       setSuffix(".sh", "application/x-shar");
  381.       setSuffix(".sv4cpio", "application/x-sv4cpio");
  382.       setSuffix(".sv4crc", "application/x-sv4crc");
  383.       setSuffix(".tar", "application/x-tar");
  384.       setSuffix(".ustar", "application/x-ustar");
  385.       setSuffix(".snd", "audio/basic");
  386.       setSuffix(".au", "audio/basic");
  387.       setSuffix(".aifc", "audio/x-aiff");
  388.       setSuffix(".aif", "audio/x-aiff");
  389.       setSuffix(".aiff", "audio/x-aiff");
  390.       setSuffix(".wav", "audio/x-wav");
  391.       setSuffix(".gif", "image/gif");
  392.       setSuffix(".ief", "image/ief");
  393.       setSuffix(".jfif", "image/jpeg");
  394.       setSuffix(".jfif-tbnl", "image/jpeg");
  395.       setSuffix(".jpe", "image/jpeg");
  396.       setSuffix(".jpg", "image/jpeg");
  397.       setSuffix(".jpeg", "image/jpeg");
  398.       setSuffix(".tif", "image/tiff");
  399.       setSuffix(".tiff", "image/tiff");
  400.       setSuffix(".ras", "image/x-cmu-rast");
  401.       setSuffix(".pnm", "image/x-portable-anymap");
  402.       setSuffix(".pbm", "image/x-portable-bitmap");
  403.       setSuffix(".pgm", "image/x-portable-graymap");
  404.       setSuffix(".ppm", "image/x-portable-pixmap");
  405.       setSuffix(".rgb", "image/x-rgb");
  406.       setSuffix(".xbm", "image/x-xbitmap");
  407.       setSuffix(".xpm", "image/x-xpixmap");
  408.       setSuffix(".xwd", "image/x-xwindowdump");
  409.       setSuffix(".htm", "text/html");
  410.       setSuffix(".html", "text/html");
  411.       setSuffix(".text", "text/plain");
  412.       setSuffix(".c", "text/plain");
  413.       setSuffix(".cc", "text/plain");
  414.       setSuffix(".c++", "text/plain");
  415.       setSuffix(".h", "text/plain");
  416.       setSuffix(".pl", "text/plain");
  417.       setSuffix(".txt", "text/plain");
  418.       setSuffix(".java", "text/plain");
  419.       setSuffix(".rtx", "application/rtf");
  420.       setSuffix(".tsv", "text/tab-separated-values");
  421.       setSuffix(".etx", "text/x-setext");
  422.       setSuffix(".mpg", "video/mpeg");
  423.       setSuffix(".mpe", "video/mpeg");
  424.       setSuffix(".mpeg", "video/mpeg");
  425.       setSuffix(".mov", "video/quicktime");
  426.       setSuffix(".qt", "video/quicktime");
  427.       setSuffix(".avi", "application/x-troff-msvideo");
  428.       setSuffix(".movie", "video/x-sgi-movie");
  429.       setSuffix(".mv", "video/x-sgi-movie");
  430.       setSuffix(".mime", "message/rfc822");
  431.    }
  432. }
  433.